﻿using System;

namespace sy3_3
{
    // 矩形类：基础类，封装长、宽及面积、周长计算
    class Rect
    {
        // 保护成员：允许派生类访问
        protected double length; // 长
        protected double width;  // 宽

        // 构造函数：初始化长和宽
        public Rect(double length, double width)
        {
            this.length = length;
            this.width = width;
        }

        // 计算矩形面积（长×宽）
        public double GetArea()
        {
            return length * width;
        }

        // 计算矩形周长（2×(长+宽)）
        public double GetPerimeter()
        {
            return 2 * (length + width);
        }
    }

    // 矩体类（长方体）：继承自Rect，新增高度属性
    class Cuboid : Rect
    {
        private double height; // 高

        // 构造函数：通过base调用父类构造函数初始化长和宽，再初始化高
        public Cuboid(double length, double width, double height) : base(length, width)
        {
            this.height = height;
        }

        // 计算矩体表面积（覆盖父类的面积计算逻辑）
        public new double GetArea()
        {
            // 表面积公式：2×(长×宽 + 长×高 + 宽×高)
            return 2 * (length * width + length * height + width * height);
        }

        // 计算矩体体积（长×宽×高）
        public double GetVolume()
        {
            return length * width * height;
        }
    }

    // 程序入口类
    class Program
    {
        static void Main(string[] args)
        {
            // 1. 输入矩形的长和宽
            Console.Write("请输入矩形长：");
            double length = double.Parse(Console.ReadLine());
            Console.Write("请输入矩形宽：");
            double width = double.Parse(Console.ReadLine());

            // 2. 创建矩形对象并计算面积、周长
            Rect rect = new Rect(length, width);
            Console.WriteLine($"解：矩形面积为 {rect.GetArea()}，周长为 {rect.GetPerimeter()}。");

            // 3. 输入矩体的高（基于已有矩形构造）
            Console.WriteLine("\n=====在此基础上构造矩体=====");
            Console.Write("请输入矩体高：");
            double height = double.Parse(Console.ReadLine());

            // 4. 创建矩体对象并计算表面积、体积
            Cuboid cuboid = new Cuboid(length, width, height);
            Console.WriteLine($"解：矩体表面积为 {cuboid.GetArea()}，体积为 {cuboid.GetVolume()}。");

            // 5. 暂停程序，等待用户查看结果
            Console.WriteLine("\n按任意键结束程序...");
            Console.ReadKey();
        }
    }
}